package com.ruyuan.eshop.diplomacy.manager.common.db;

import com.ruyuan.eshop.diplomacy.manager.common.cache.RedisSetCache;

import java.util.List;
import java.util.Map;
import java.util.Optional;
import java.util.Set;

/**
 * set类型数据源
 *
 * @author zhonghuashishan
 */
public interface RedisSetDatabase<T> {

    /**
     * 数据源单表
     *
     * @param
     * @return java.lang.String
     * @author zhonghuashishan
     */
    String getTableName();

    /**
     * 数据源全量表
     *
     * @param
     * @return java.util.Set<java.lang.String>
     * @author zhonghuashishan
     */
    Set<String> getTableNameSet();

    /**
     * 获取全量数据
     *
     * @param tableName 表名
     * @return java.util.Optional<java.util.Map < java.lang.String, com.ruyuan.eshop.diplomacy.manager.common.source.RedisSetSource>>  key 表名，value 主键ID集合
     * @author zhonghuashishan
     */
    Optional<Map<String, RedisSetCache>> listIncrMap(String tableName);

    /**
     * 获取增量数据
     *
     * @param tableName 表名
     * @param idSet     指定主键ID
     * @return java.util.Optional<java.util.Map < java.lang.String, com.ruyuan.eshop.diplomacy.manager.common.source.RedisSetSource>>
     * @author zhonghuashishan
     */
    Optional<Map<String, RedisSetCache>> listIncrMap(String tableName, Set<Integer> idSet);

    /**
     * 获取单表所有主键ID集合
     *
     * @return java.util.Optional<java.util.List < java.lang.Integer>>
     * @author zhonghuashishan
     */
    Optional<List<Integer>> getTableAllIdList();

    /**
     * 获取全部表数据
     *
     * @param
     * @return java.util.Optional<java.util.Map < java.lang.String, com.ruyuan.eshop.diplomacy.manager.common.source.RedisSetSource>>
     * @author zhonghuashishan
     */
    Optional<Map<String, RedisSetCache>> listAllRedisKeyMap();

}
